home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / DECODE.S < prev    next >
Text File  |  1996-11-10  |  8KB  |  427 lines

  1. *
  2. *
  3. *  DECODE.S
  4. *
  5. *  ânâtâ}âôò£ìåë╗
  6. *
  7. include  DOSCALL.MAC
  8. include  JPEG.MAC
  9. include  work.inc
  10.  
  11.     .text
  12.     .cpu    68000
  13.     .xref    PrintWI
  14.     .xref    PrintW
  15.     .xref    IllegalJPEG,work_adrs
  16.     .xref    Zigzag,Zigzag_Y
  17.  
  18. inGetC    macro
  19.     local    inGetC1
  20. *GetC▓▌╫▓▌ôWèJ Start
  21.     dbra    d7,inGetC1    #10
  22.          bsr     GetBuf        #20
  23. inGetC1
  24.     move.b    (a5)+,d5    #8
  25.     moveq.l    #8,d6        #4
  26. *GetC▓▌╫▓▌ôWèJ end
  27.     endm
  28.  
  29. ******************************************************************************
  30. *
  31. *  ânâtâ}âôò£ìåôⁿù═üiécébɼò¬üjüòïtù╩Äqë╗üòïtâWâOâUâO
  32. *
  33. *   a0.l  âfü[â^ù╠êµ
  34. *   a1.l  écébânâtâ}âôû╪âeü[âuâïüiéWârâbâgò¬üj
  35. *   a2.l  æOë±é╠écébù╠êµ
  36. *   a4.l  ïtù╩Äqë╗├░╠▐┘
  37. *   a5.l  âoâbâtâ@ü[âAâhâîâX
  38. *
  39. *   d7.w    LastFFxxSize
  40. *   d6.w    rlen    ÄcéΦârâbâgÆ╖
  41. *   d5.l    buffer
  42. ******************************************************************************
  43. .xdef    DecodeDCAC
  44. DecodeDCAC
  45.  
  46. *╩╠╧▌òäìåé╞DCÆlé≡8bitò¬êΩïCé╔âfâRü[âh
  47. *------------------------
  48.         move.w    d5,d3
  49.         clr.b    d3
  50.         lsr.w    #8-3-2,d3
  51.         move.l    (a1,d3.w),d2
  52.  
  53.     *├▐║░─▐é╡é╜╦▐»─ò¬é╛é»Ä╠é─éΘ
  54.     *--------------------
  55.         cmp.b    d2,d6
  56.         bhi    @f
  57.         lsl.w    d6,d5
  58.         sub.b    d6,d2
  59.         inGetC
  60. @@
  61.         lsl.w    d2,d5
  62.         sub.b    d2,d6
  63.  
  64.         swap.w    d2
  65.         bpl    dc_lower_8bit    ├▐║░─▐é═8bitê╚ë║é┼éáéΘ
  66.  
  67. *ÄcéΦé╠╩╠╧▌òäìåé≡├▐║░─▐
  68. *--------------------------
  69.     rept    8
  70.         add.w    d5,d5        #4
  71.         addx.w    d2,d2        #4
  72.         subq.w    #1,d6        #4
  73.         bne    @f        #10
  74.         inGetC
  75. @@
  76.         add.w    d2,d2        #4
  77.         move.w    (a1,d2.w),d2    #14
  78.         bmi    dc15        #10
  79.     endm
  80.         bra    IllegalJPEG
  81. dc15
  82.         tst.b    d2        #4
  83.         bnz    dc40        #10,14    DCÆlô╟é▌ì₧é▌é╓
  84.  
  85.     *DCÆlé═0é┼éáéΘ
  86.     *-------------------------------
  87.         move.w    (a2),d0
  88.         bmi    dc90
  89.         move.l    (a4)+,a2
  90.         move.w    (a2,d0.w),(a0)
  91.         bra    DECODE_AC
  92.  
  93.     *DCÆléαêΩÅÅé╔├▐║░─▐é╡é╜é⌐üH
  94.     *---------------------------------
  95. dc_lower_8bit
  96.         move.w    4(a1,d3.w),d0
  97.         bne    dc75        é╡é╜
  98.  
  99. *DCÆlé╠├▐║░─▐
  100. *--------------------------------
  101.         move.w    6(a1,d3.w),d2
  102.     *DCÆlô╟é▌ì₧é▌
  103.     *----------------------------------------------
  104. dc40
  105.         not.w    d5
  106.         ext.l    d5
  107.         not.w    d5
  108.  
  109.         cmp.b    d2,d6
  110.         bhi    @f
  111.         lsl.l    d6,d5
  112.         sub.b    d6,d2
  113.         inGetC
  114.         cmp.b    d2,d6
  115.         bhi    @f
  116.         lsl.l    d6,d5
  117.         sub.b    d6,d2
  118.         inGetC
  119. @@
  120.         lsl.l    d2,d5
  121.         sub.b    d2,d6
  122.  
  123.         move.l    d5,d0
  124.         swap    d0
  125.         add.w    d0,d0
  126. dc75
  127.         bpl    @f
  128.         addq.w    #2,d0
  129. @@
  130.         add.w    (a2),d0
  131.         move.w    d0,(a2)
  132.         bmi    dc90
  133.  
  134.       *DCÆlé╠ì╖ò¬é¬É│é╠ÅΩìç
  135.       *-------------------
  136.         move.l    (a4)+,a2
  137.         move.w    (a2,d0.w),(a0)
  138.         bra    DECODE_AC
  139. dc90
  140.     *DCÆlé╠ì╖ò¬é¬òëé╠ÅΩìç
  141.     *-------------------
  142.         move.l    (a4)+,a2
  143.         move.w    -2(a2,d0.w),(a0)
  144. ******************************************************************************
  145. *
  146. *  ânâtâ}âôò£ìåôⁿù═üié`ébɼò¬üjüòïtù╩Äqë╗üòïtâWâOâUâO
  147. *
  148. *   a0.l  âfü[â^ù╠êµ
  149. *   a1.l  é`ébânâtâ}âôû╪âeü[âuâïüiéWârâbâgò¬üj
  150. *   a4.l  ïtù╩Äqë╗├░╠▐┘
  151. *   a5.l  âoâbâtâ@ü[âAâhâîâX
  152. *   a3.l  âWâOâUâOâeü[âuâï
  153. *
  154. *   d7.w  ndata  âoâbâtâ@ü[ôαâfü[â^Éö
  155. *   d6.w  rlen   ÄcéΦârâbâgÆ╖
  156. *   d5.l  buffer
  157. *   d1.b  FFdxFlag
  158. *
  159. *    d2  ssss
  160. *    d3  nnnn
  161. *    d4  Zigzag destination
  162. *
  163. ******************************************************************************
  164. .xdef DECODE_AC
  165. DECODE_AC
  166.         moveq.l    #63*2,d4
  167.  
  168. *╩╠╧▌òäìåé╞ACÆlé≡8bitò¬êΩïCé╔âfâRü[âh
  169. *------------------------
  170. ac10
  171.         move.w    d5,d3        #4
  172.         clr.b    d3        #4
  173.         lsr.w   #8-3-2,d3    #10
  174.         lea.l    8(a1,d3.w),a2    #12
  175.         move.l    (a2)+,d2    #12
  176.  
  177.     *├▐║░─▐é╡é╜╦▐»─ò¬é╛é»Ä╠é─éΘ
  178.     *--------------------
  179.         cmp.b    d2,d6        #4
  180.         bhi    @f        #10
  181.         lsl.w    d6,d5
  182.         sub.b    d6,d2
  183.         inGetC
  184. @@
  185.         lsl.w    d2,d5        #6+2n
  186.         sub.b   d2,d6        #4
  187.  
  188.         swap.w    d2
  189.         bmi    ac_normal    8bit├▐║░─▐é╢éßæ½éΦé╚éó
  190.  
  191.     *ACÆléαêΩÅÅé╔├▐║░─▐é╡é╜é⌐üH
  192.     *---------------------------------
  193.         move.w    (a2)+,d0
  194.         bnz    ac_decoded    é╡é╜
  195.         move.w    (a2),d3        #8    d3=ACÆlé╠╦▐»─Éö
  196.  
  197. *ACÆlé╠├▐║░─▐
  198. *--------------------------------
  199. ACValueRead
  200.     *ACÆlô╟é▌ì₧é▌
  201.     *---------------------------
  202.         not.w    d5        #4
  203.         ext.l    d5        #4
  204.         not.w    d5        #4
  205.         cmp.b    d3,d6        #4
  206.         bhi    @f        #10
  207.         lsl.l    d6,d5
  208.         sub.b    d6,d3
  209.         inGetC
  210.         cmp.b    d3,d6
  211.         bhi    @f
  212.         lsl.l    d6,d5
  213.         sub.b    d6,d3
  214.         inGetC
  215. @@
  216.         lsl.l    d3,d5        #8+2n
  217.         sub.b    d3,d6        #4
  218.  
  219.     *ACÆlÅæé½ì₧é▌
  220.     *-----------------------
  221.         move.l    d5,d0
  222.         swap.w    d0
  223.         add.w    d0,d0
  224. ac_decoded
  225.  
  226.     *0é╠î┬Éöò¬é╛é»0é≡Åæé½ì₧é▐
  227.     *------------------------------
  228.         add.w    d2,d2        d2.w=éOé╠î┬Éö*2
  229.         beq    ac17        #10
  230.  
  231.         sub.b    d2,d4
  232.         bls    ac_EOB        éOé╠î┬Éöé¬ÄcéΦé╠é`ébù╠êµé≡Æ┤éªé╜
  233.         clr.w    d3
  234.         add.w    d2,d2
  235.         add.w    d2,a4
  236.         neg.w    d2
  237.         jmp    ac17(pc,d2.w)
  238.         rept 16
  239.         adda.w    (a3)+,a0
  240.         move.w    d3,(a0)
  241.         endm
  242. ac17
  243.         adda.w    (a3)+,a0    #14
  244.         move.l    (a4)+,a2    #12
  245.         move.w    (a2,d0.w),(a0)    #18    *AC
  246.         subq.w    #2,d4
  247.         bnz    ac10
  248.         rts
  249. *EOBé┼éáéΘ
  250. *-----------------------
  251. ac_EOB
  252.         add.b    d2,d4        d4.w = 0é╠î┬Éö
  253. ac_EOB2
  254.         rts
  255.  
  256.  
  257. *ÄcéΦé╠╩╠╧▌òäìåé≡├▐║░─▐
  258. *--------------------------
  259. ac_normal
  260.     rept    8
  261.         add.w    d5,d5
  262.         addx.w    d2,d2
  263.         subq.w    #1,d6
  264.         bne    @f
  265.         inGetC
  266. @@
  267.         add.w    d2,d2
  268.         move.w    8(a1,d2.w),d2
  269.         bmi    ac15
  270.     endm
  271.         bra    IllegalJPEG
  272. ac15
  273.         tst.b    d2
  274.         bze    ac_EOB2        EOBé┼éáéΘ
  275.  
  276.         moveq.l    #$000f,d3            #4
  277.         and.w    d2,d3        AC        #4
  278.         lsr.b    #4,d2        Run        #16
  279.         bra    ACValueRead
  280.  
  281. ******************************************************************************
  282. *
  283. *    âtâ@âCâïô╟é▌ì₧é▌($FFxxé╠Åêù¥éαé▒é▒é┼ìséñ)
  284. *
  285. *    ôⁿù═    a5.l    ô╟é▌ì₧é▌▒─▐┌╜
  286. *        d1.w    0)$FFé≡ô╟é▌ì₧é±é╛ -1)ô╟é▌ì₧é±é┼éóé╚éó
  287. *        d7.l    high)╩▐»╠ºÄcéΦ╩▐▓─Éö
  288. *    Åoù═    d7.l    high)╩▐»╠ºÄcéΦ╩▐▓─Éö
  289. *            low)ăé╠$FFé▄é┼üAûöé═üA╩▐»╠ºì┼îπé▄é┼é╠╩▐▓─Éö
  290. *        d1.w    0)$FFé≡ô╟é▌ì₧é±é╛ -1)ô╟é▌ì₧é±é┼éóé╚éó
  291. *        a5.l    ô╟é▌ì₧é▌▒─▐┌╜
  292. *    öjë≤    d0.l,d6.l
  293. ******************************************************************************
  294. .xdef GetBuf
  295. GetBuf
  296. *ÄcéΦé╠╩▐»╠º╩▐▓─Éöĵô╛
  297. *-----------------------
  298.     swap.w    d7            #4
  299. *é╨é╞é┬æOé╠╩▐▓─é¬$FFé╠ÅΩìçüAăé╠╩▐▓─é¬$00,$FF,$Dxé⌐┴¬»╕é╖éΘ
  300. *-----------------------
  301.     
  302.     tst.w    d1            #4
  303.     bnz    GetBufSearchFF    é╨é╞é┬æOé╠╩▐▓─é═$FFé┼é═é╚éó    #10
  304. 1:
  305.     dbra.w    d7,2f            #10
  306.     bsr    GetBufAllSub
  307. 2:
  308.     move.b    (a5)+,d0        #8
  309.     beq    GetBufSearchFF    $00é╠ÅΩìç($FF00)    #10
  310.     cmp.b    #$d0,d0                    #8
  311.     bcs    GetBufFFxxErr    $D0ê╚ë║é╠║░─▐é═┤╫░    #10
  312.     cmp.b    #$df,d0                    #8
  313.     bls.b    GetBufFFDx    $Dxé╠ÅΩìç        #10
  314.     cmp.b    #$ff,d0
  315.     beq    1b        $FFé╠ÅΩìç
  316.     bra    GetBufFFxxErr    ┤╫░
  317.  
  318. GetBufFFDx
  319.         *$FFDxé╠ÅΩìçüAô╟é▌ì₧é▌ôrÆåé╠╦▐»─é≡öjèⁿé╖éΘ
  320.         *------------------
  321.         moveq.l    #0,d0
  322.         move.w    d0,preDC(a6)
  323.         move.l    d0,preDC+2(a6)
  324.         move.w    d0,rlen(a6)
  325. GetBufFFDxLoop
  326.         dbra    d7,@f
  327.         bsr    GetBufAllSub
  328. @@
  329.         move.b    (a5)+,d5
  330.         lsl.w    #8,d5
  331.         cmp.w    #$ff00,d5
  332.         bne    GetBufSearchFF    Äƒé╠╩▐▓─ĵéΦì₧é▌
  333. GetBufFFDxChkFFxx
  334.         dbra    d7,@f
  335.         bsr    GetBufAllSub
  336. @@
  337.         move.b    (a5)+,d0
  338.         beq    GetBufSearchFF    Äƒé╠╩▐▓─ĵéΦì₧é▌
  339.         cmp.b    #$ff,d0
  340.         beq    GetBufFFDxChkFFxx    $FFFFé╚éτû│Äï
  341.         and.b    #$f0,d0
  342.         cmp.b    #$d0,d0
  343.         beq    GetBufFFDxLoop        é▄é╜$FFDxé¬ùêé╜
  344. GetBufFFxxErr
  345.         subq.l    #1,a5
  346.         addq.w    #1,d7
  347. *$FFîƒì⌡
  348. *--------------------
  349. GetBufSearchFF
  350.     dbra.w    d7,@f        #10
  351.     bsr    GetBufAllSub
  352. @@
  353.     move.l    a5,d6        #4
  354.     moveq.l    #-1,d0        #4
  355. @@    cmp.b    (a5)+,d0    #8
  356.     dbeq    d7,@b        #10
  357.     sne.b    d1        #6
  358.     ext.w    d1        #4    d1=$0000)ö¡î⌐Ä₧ -1)ûóö¡î⌐Ä₧
  359.     sub.w    d1,d7        #4    ûóö¡î⌐Ä₧ d7=d7+1
  360.     swap.w    d7        #4
  361.     move.w    a5,d7        #4
  362.     move.l    d6,a5        #4
  363.     sub.w    d6,d7        #4
  364.     subq.w    #1,d7        #4
  365.     rts            #16
  366.  
  367. **************
  368. *    ôⁿù═    é╚é╡
  369. *    Åoù═    d7    ô╟é▌ì₧é±é╛╩▐▓─Éö
  370. *        a5    ô╟é▌ì₧é▌èJÄn▒─▐┌╜
  371. *    öjë≤    d0.l
  372. **************
  373. GetBufAllSub
  374.     move.l    buf_size(a6),-(sp)
  375.     movea.l    buf_adrs(a6),a5
  376.     move.l    a5,-(sp)
  377.     move.w    Jhandle(a6),-(sp)
  378.     DOS    _READ
  379.     lea.l    10(sp),sp
  380.     move.l  d0,d7
  381.     bmi    IllegalJPEG    ô╟é▌ì₧é▀é╚éó
  382.     bnz    @f
  383.  
  384.     *é▒éΩê╚Åπ╠º▓┘é╚é╡é╚é╠é┼üADummy DataÉ▌ÆΦ
  385.     *---------------------
  386.     tst.l    errflg(a6)
  387.     bnz    IllegalJPEG    ô╟é▌ì₧é▀é╚éó
  388.     move.l    #-1,errflg(a6)
  389.     move.l    #$ff00ff00,(a5)
  390.     addq.w    #4,d7
  391. @@
  392.     subq.w    #1,d7
  393.     rts
  394. ******************************************************************************
  395. *
  396. *    pre DECODE
  397. *
  398. *    ôⁿù═    û│é╡
  399. *    Åoù═    d1    FFxxFlag(a6)É▌ÆΦÆl
  400. *        d5    rdata(a6)É▌ÆΦÆl
  401. *        d6    rlen(a6)É▌ÆΦÆl
  402. *        d7    LastBufSize(a6),LastFFxxSize(a6)É▌ÆΦÆl
  403. *        a5    NextFFxxAdrs(a6)É▌ÆΦÆl
  404. *    öjë≤    d0.l
  405. ******************************************************************************
  406. .xdef preDECODE
  407. preDECODE
  408.     clr.w    -(sp)
  409.     move.l    file_point(a6),-(sp)
  410.     move.w    Jhandle(a6),-(sp)
  411.     DOS    _SEEK
  412.     addq.l    #8,sp
  413.  
  414.     moveq.l    #0,d1
  415.     move.w    d1,preDC(a6)
  416.     move.l    d1,preDC+2(a6)
  417.     move.l    d1,errflg(a6)
  418.     moveq.l    #0,d7
  419.     moveq.l    #-1,d1
  420.     bsr    GetBuf
  421.     move.b    (a5)+,d5
  422.     lsl.w    #8,d5
  423.     inGetC
  424.     rts
  425.  
  426.   .end
  427.